﻿/**
 * A few helper methods for keeping references to certain collections of types in the system.
 * New types of of Mappers, input modes, CaTypes, and certain rule definitions can easily be added to the 
 * system graphically simply by adding them to the respective Enums after implementation.
 * Author: Anders Høst | ahkj@itu.dk
 * date: 13 dec 2010
 */

using System;
using System.Collections.Generic;
using System.Linq;
using AutomaTones.Controller;
using AutomaTones.Model.Automaton_Model.RuleLib;
using AutomaTones.Model.MIDI.Mappers;
using AutomaTones.Model.Tools;

namespace AutomaTones.Model.Utils {
    static class AutomatoneTypes {

        /// <summary>
        /// Method that gets the types of InputMode. These are set inside every CAVIewController
        /// so users(developers) can chose the limit the inputs modes for this CAVIewController.
        /// </summary>
        /// <returns></returns>
        public static List<InputMode> GetInputModes() {
            return Enum.GetValues(typeof(InputMode)).Cast<InputMode>().ToList();
        }

        /// <summary>
        /// Method that gets the types of GofPatterns. These are set inside every CAVIewController
        /// so users(developers) can chose the limit the inputs modes for this CAVIewController.
        /// </summary>
        public static List<GameOfLife.GofPattern> GetPatterns() {
            return Enum.GetValues(typeof(GameOfLife.GofPattern)).Cast<GameOfLife.GofPattern>().ToList();
        }

        /// <summary>
        /// Method that gets the types of CARules. These are set inside every CAVIewController
        /// so users(developers) can chose the limit the inputs modes for this CAVIewController.
        /// </summary>
        /// <returns></returns>
        public static List<CAType> GetCaTypes() {
            return Enum.GetValues(typeof(CAType)).Cast<CAType>().ToList();
        }

        /// <summary>
        /// Method that gets the types of Mappers. These are set inside every CAVIewController
        /// so users(developers) can chose the limit the inputs modes for this CAVIewController.
        /// </summary>
        /// <returns></returns>
        public static List<Mapper> GetMappers() {
            return Enum.GetValues(typeof(Mapper)).Cast<Mapper>().ToList();
        }
    }
}
